#include "longint.h"
#include <iostream>
using namespace std;

LongInt::LongInt()
{
    for(int i=0;i<L;i++)
    {
        data[i]=0;
    }
}


LongInt LongInt::operator + (LongInt& A)
{
    LongInt rs;
    for(int i=0;i<L;i++)
    {
            int tmp=this->getData(i)+A.getData(i);
            rs.setData(i,rs.getData(i)+tmp%10);
            if(tmp>9){
                if(i+1<L){
                    rs.setData(i+1,rs.getData(i+1)+1);}
                else{
                    //wrong
                    cout<<"WRONG..."<<endl;
                    //return
                }
            }
    }
    return rs;
}

LongInt LongInt::operator - (LongInt& A)
{
    LongInt rs;
    //
    return rs;
}
LongInt LongInt::operator = (LongInt& A)
{
    for(int i=0;i<L;i++)
    {
        data[i]=A.getData(i);
    }
    return *this;
}
LongInt LongInt::operator * (int k)
{
    LongInt rs;
    for(int i=0;i<L;i++)
    {
        int tmp=rs.getData(i)+data[i]*k;
        int tmp_0=tmp%10;
        int tmp_1=tmp/10;
        rs.setData(i,tmp_0);
        if(i+1<L){
            rs.setData(i+1,rs.getData(i+1)+tmp_1);
        }
        else
        {
            cout<<"wrong out."<<endl;
        }
    }
}
LongInt LongInt::operator / (LongInt& A)
{
}
void LongInt::setData(int pos, int Value)
{
    if(pos>=0 && pos<L)
    {
        data[pos]=Value;
    }
}
int LongInt::getData(int pos)
{
    if(pos>=0 && pos<L){
        return data[pos];
    }
    else{
        return 0;
    }
}

int LongInt::digit()
{
    int rs=0;
    for(int i=L-1;i>=0;i--)
    {
        if(data[i]>0){rs=i;break;}
    }
    return rs+1;
}
LongInt LongInt::section(int i, int j) //1-based
{
    LongInt rs;
    int p=0;
    for(int k=i-1;k<=j-1;k++)
    {
        rs.setData(p,data[k]);
        p++;
    }
    return rs;
}
bool LongInt::operator > (LongInt& A)
{
    return true;
}
bool LongInt::operator < (LongInt& A)
{
    return true;
}
bool LongInt::operator == (LongInt& A)
{
    return true;
}
